package com.velvetantler.weather.utils

import android.content.Context
import androidx.core.content.edit

class PreferenceUtil private constructor(context: Context) {

    companion object {
        @Volatile
        private var instance: PreferenceUtil? = null
        fun getInstance(context: Context): PreferenceUtil =
            // 第一层校验instance ?: ...：如果已有实例，直接返回，避免每次都进入同步代码块
            instance ?:
            // synchronized(this)：如果没有实例，进入同步代码块（加锁），确保多线程安全
            synchronized(this) {
                // 第二层校验instance ?: ...：在同步代码块内再次校验，防止多线程同时通过第一层校验后重复创建实例
                instance ?:
                // 通过私有构造方法创建实例，这里传入applicationContext是为了避免内存泄漏（避免持有 Activity 上下文）
                PreferenceUtil(context.applicationContext)
                    .also { instance = it } // 创建实例并赋值给instance
            }
    }

    private val pref by lazy {
        context.getSharedPreferences("weather_pref", Context.MODE_PRIVATE)
    }

    /**
     * 存数据
     * @param  key 键
     * @param  value 值
     */
    fun setValue(key: String, value: String) {
        pref.edit {
            putString(key, value)
            apply()
        }
    }

    /**
     * 获取数据
     * @param  key 键
     */
    fun getValue(key: String): String? {
        return pref.getString(key, null)
    }

    /**
     * 删除数据
     * @param  key 键
     */
    fun removeValue(key: String) {
        pref.edit {
            remove(key)
            apply()
        }
    }

}